package com.hlk.singleton;

import java.io.Serializable;

/**
 * @author hlk
 * @version 1.0
 * @date 2020-11-25 11:16
 */
public class HungrySingleton implements Serializable {
    private final static HungrySingleton INSTANCE;

    static {
        INSTANCE = new HungrySingleton();
    }

    private HungrySingleton() {
        // 只适用于类加载时候创建单例对象的时候
        if (INSTANCE != null) {
            throw new RuntimeException("单例构造器禁止反射调用");
        }
    }

    public static HungrySingleton getInstance() {
        return INSTANCE;
    }


    /**
     * 通过这个方法解决序列化，反序列化对单例的破坏
     * <p>
     * 该方法是通过反射调用的，在反序列化的时候已经新建了对象，知识没有返回而已。
     * 而是通过反射去调用该方法，获取到对象
     *
     * @return
     */
    private Object readResolve() {
        return INSTANCE;
    }
}

